﻿/**
 * Title:工作流表单设计下拉列表
 */
CKEDITOR.dialog.add('wf-select', function(editor) {
	var _escape = function(value){
		return value;
	};
	var sltOptions = [];
	var SelectUtil = {
		getInitOption : function(dialog) {
			var initText = dialog.getContentElement('cb', 'init_text').getValue().replace(/(^\s*)|(\s*$)/g, "");
			var initValue = dialog.getContentElement('cb', 'init_value').getValue().replace(/(^\s*)|(\s*$)/g, "");
			return {"text":initText, "value":initValue};
		},
		addOption : function(dialog, optionObj) {
			if (!optionObj || !optionObj.text || !optionObj.value) return;
			//alert(optionObj.text + "=" + optionObj.value);
			for (var i = 0; i < sltOptions.length; i ++) {
				if (sltOptions[i].value == optionObj.value) {
					alert(eidtor.lang.slt_repeatError);
					return;
				}
			}
			sltOptions[sltOptions.length] = optionObj;
			dialog.getContentElement('cb', 'option_texts').add(optionObj.text, optionObj.value);
			dialog.getContentElement('cb', 'option_values').add(optionObj.value, optionObj.value);
		},
		delOption : function(dialog) {
			var value = dialog.getContentElement('cb', 'option_texts').getValue().replace(/(^\s*)|(\s*$)/g, "");
			//alert("delete value=" + value);
			if (!value || value == "") return;
			var tmp = [];
			for (var i = 0; i < sltOptions.length; i ++) {
				if (sltOptions[i].value == value) continue;
				tmp[tmp.length] = sltOptions[i];
			}
			sltOptions = tmp;
			SelectUtil.rebuild(dialog);
		},
		move : function(dialog, up) {
			var value = dialog.getContentElement('cb', 'option_texts').getValue().replace(/(^\s*)|(\s*$)/g, "");
			//alert("move value=" + value);
			if (!value || value == "") return;
			if (sltOptions.length <= 1) return;
			var index = -1;
			for (var i = 0; i < sltOptions.length; i ++) {
				if (sltOptions[i].value == value) {
					index = i;
					break;
				}
			}
			//alert("find moved index=" + index);
			if (index == -1) return;
			if (up) {
				if (index == 0) return;
				var tmp = sltOptions[index];
				sltOptions[index] = sltOptions[index-1];
				sltOptions[index-1]=tmp;
			} else {
				if (index == sltOptions.length-1) return;
				var tmp = sltOptions[index];
				sltOptions[index] = sltOptions[index+1];
				sltOptions[index+1] = tmp;
			}
			SelectUtil.rebuild(dialog);
		},
		rebuild : function(dialog) {
			//alert("start rebuild the options");
			var sltText = dialog.getContentElement('cb', 'option_texts');
			var sltValue = dialog.getContentElement('cb', 'option_values');
			sltText.clear();
			sltValue.clear();
			for (var i = 0; i < sltOptions.length; i ++) {
				sltText.add(sltOptions[i].text, sltOptions[i].value);
				sltValue.add(sltOptions[i].value, sltOptions[i].value);
			}
		},
		selectTwo : function(dialog, value) {
			if (!value || value == "") return;
			var sltText = dialog.getContentElement('cb', 'option_texts');
			var sltValue = dialog.getContentElement('cb', 'option_values');
			sltText.setValue(value);
			sltValue.setValue(value);
		}
	};
	return {
		title: editor.lang.slt_dlgTitle,
　　 	resizable: CKEDITOR.DIALOG_RESIZE_BOTH,
　　 	minWidth: 360,
　　 	minHeight: 260,
　　 	contents: [{
　　 		id: 'cb',
　　 		name: 'cb',
　　 		label: 'cb',
　　 		title: 'cb',
　　 		elements: [{
　　 			type: 'text',
　　 			required: true,
　　 			label: editor.lang.slt_lblId,
				maxLength: 30,
　　 			id: 'id',
　　 			validate: function() {
					var reg = /^[A-Za-z0-9]+$/;
					var val = this.getValue().replace(/(^\s*)|(\s*$)/g, "");
					if (val == "" || val.length > 30 || !reg.test(val)) {
						alert(editor.lang.slt_lblIdError);
						return false;
					}
					this.setValue(val);
					return true;
				}
　　 		},{
　　 			type: 'text',
　　 			required: true,
　　 			label: editor.lang.slt_lblName,
				maxLength: 30,
　　 			id: 'name',
　　 			validate: function() {
					var val = this.getValue().replace(/(^\s*)|(\s*$)/g, "");
					if (val == "" || val.length > 30) {
						alert(editor.lang.slt_lblNameError);
						return false;	
					}
					this.setValue(val);
					if (sltOptions.length <= 0) {
						alert(editor.lang.slt_optionsEmptyError);
						return false;
					}
					return true;
				}
　　 		},{
　　 			type: 'hbox',
				widths: ['75%', '25%'],
				children : [{
					type: 'hbox',
					widths: ['50%', '50%'],
					children : [{
						type: 'vbox',
						children: [{
							type: 'text',
							label: editor.lang.slt_lblOptionText,
							maxLength: 30,
							id: 'init_text'
						},{
							type: 'select',
							id: 'option_texts',
							style: 'width:100%',
							items: [],
							size: 6,
							onClick: function() {
								SelectUtil.selectTwo(this.getDialog(), this.getValue().replace(/(^\s*)|(\s*$)/g, ""));	
							}
						}]
					},{
						type: 'vbox',
						children: [{
							type: 'text',
							label: editor.lang.slt_lblOptionValue,
							maxLength: 30,
							id: 'init_value'
						},{
							type: 'select',
							id: 'option_values',
							style: 'width:100%',
							items: [],
							size: 6,
							onClick: function() {
								SelectUtil.selectTwo(this.getDialog(), this.getValue().replace(/(^\s*)|(\s*$)/g, ""));	
							}
						}]
					}]
				},{
					type: 'vbox',
					children : [{
						type: 'button',
						label: editor.lang.slt_btnAdd,
						onClick : function() {
							var dialog = this.getDialog();
							SelectUtil.addOption(dialog, SelectUtil.getInitOption(dialog));
						}
					},{
						type: 'button',
						label: editor.lang.slt_btnDel,
						onClick : function() {
							SelectUtil.delOption(this.getDialog());
						}
					},{
						type: 'button',
						label: editor.lang.slt_btnUp,
						onClick : function() {
							SelectUtil.move(this.getDialog(), true);
						}
					},{
						type: 'button',
						label: editor.lang.slt_btnDown,
						onClick : function() {
							SelectUtil.move(this.getDialog(), false);
						}
					}]
				}]
　　 		}]
　　 	}],
　　 	onOk: function(){
　　 		var id = this.getValueOf('cb', 'id');
			var name = this.getValueOf('cb', 'name');
			var txt = '<select class="wf-field" name="' + id + '" title="' + name + '" wf-field="true">';
			for (var i = 0; i < sltOptions.length; i ++) {
				txt += '<option value="' + sltOptions[i].value + '">' + sltOptions[i].text + '</option>';
			}
			txt += '</select>';
　　 		editor.insertHtml(txt);
　　 	},
　　 	onLoad: function(){
　　 	}
	};
});